Exemple #1
0
def mptt_build_tree(queryset, children_key):
    '''
    :param queryset: the entire tree, or portion of tree, you're trying to construct
    :param children_key: key to store children, can't be a field name that's already on the model
    :return: QuerySet, with children (also QuerySets) properly nested to each level present
    '''
    nodes = OrderedDict()
    nodes_children = OrderedDict()

    for row in queryset:
        nodes[row.id] = row
        if nodes_children.get(row.parent_id):
            nodes_children[row.parent_id]._result_cache.append(row)
        else:
            nodes_children[row.parent_id] = QuerySet()
            nodes_children[row.parent_id]._result_cache = [row]

    for k, node in nodes.iteritems():
        # Try to find the parent so we can attach the child nodes
        setattr(node, children_key, QuerySet())
        children = getattr(node, children_key)
        children._result_cache = []
        if nodes.get(node.parent_id):
            children = getattr(nodes[node.parent_id], children_key)
            children._result_cache.append(node)

    # Build out root nodes for the base level of the list
    root_nodes = QuerySet()
    root_nodes._result_cache = []
    for node_id, node in nodes.iteritems():
        if node.parent_id is None:
            root_nodes._result_cache.append(node)

    return root_nodes
Exemple #2
0
def home_article():
    iif_list = [1, 2, 3, 4, 5, 6]  # Industry information
    pct_list = [7, 8, 9, 10]  # Press control
    iif_query = Article.objects.filter(type__in=iif_list).query
    pct_query = Article.objects.filter(type__in=pct_list).query
    iif_query.group_by = ['type']
    pct_query.group_by = ['type']
    iif = QuerySet(query=iif_query, model=Article)
    pct = QuerySet(query=pct_query, model=Article)
    return iif, pct
Exemple #3
0
def create_allowed_operation(allowed_groups: QuerySet(MrMapGroup),
                             operations: QuerySet(OGCOperation),
                             root_metadata: Metadata,
                             how_much_allowed_operations: int = 1,
                             allowed_area: MultiPolygon = None,):

    return baker.make_recipe(
        "tests.baker_recipes.service_app.allowed_operation",
        _quantity=how_much_allowed_operations,
        root_metadata=root_metadata,
        allowed_groups=allowed_groups,
        operations=operations,
        allowed_area=allowed_area,
    )
Exemple #4
0
class CountryViewSet(viewsets.GenericViewSet):
    queryset = QuerySet()
    serializer_class = CountrySerializer
    pagination_class = PageNumberPagination
    schema = NoModelAutoSchema(path_parameters=dict(id=PathParameter(
        scheme_type='UUID type', description='id of a country')), )

    def retrieve(self, request, *args, **kwargs):
        instance = countries[0]
        serializer = self.get_serializer(instance)
        return Response(serializer.data)

    @custom_parameters(query_serializer=CountryQuerySerializer,
                       response_serializer=CountryResponseSerializer)
    def list(self, request, *args, **kwargs):
        page = self.paginate_queryset(countries)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        serializer = self.get_serializer(countries, many=True)
        return Response(serializer.data)

    @action(methods=['GET'], detail=True)
    def help(self, request, *args, **kwargs):
        instance = countries[0]
        serializer = self.get_serializer(instance)
        return Response(serializer.data)
Exemple #5
0
def get_library_card(request):
    # if this is a POST request we need to process the form data
    if request.method == 'GET':
        # create a form instance and populate it with data from the request:
        form = GetLibraryCardForm(request.GET)
        # check whether it's valid:
        if form.is_valid():
            # process the data in form.cleaned_data as required
            # ...
            # redirect to a new URL:
            input_type = form.cleaned_data['input_type']
            b = QuerySet()
            if input_type.lower() == 'id':
                b = library_cards.get_by_id(form.cleaned_data['input'])
            elif input_type.lower() == 'name':
                b = library_cards.get_by_name(form.cleaned_data['input'])
            else:
                return HttpResponse('Invalid type')
            if len(b) == 0:
                return HttpResponse('No library cards were found')
            return HttpResponse(b)

    # if a GET (or any other method) we'll create a blank form
    else:
        form = GetLibraryCardForm()

    return render(request, 'website_frontend/get_library_card.html/',
                  {'form': form})
Exemple #6
0
 def __init__(self, field, value):
     self.field = field
     self.attname = getattr(self.field, 'attname', None)
     self.field_bound = self.attname is not None
     self.qs = (self.field.model._default_manager.all()
                if self.field_bound else QuerySet())
     self.value = value
Exemple #7
0
    def patch(self, request: HttpRequest, *args: Any, **kwargs: Any) -> HttpResponse:
        # permission check deferred to .perform_update()
        instance = self.model_object
        has_read_permissions = False
        if p.has_perms_shortcut(self.user_object, instance, "r"):
            has_read_permissions = True

        serializer = self.get_serializer(
            instance=instance,
            data=self.request_data,
            partial=True,
        )
        serializer.is_valid(raise_exception=True)
        # User must have write permission on the field being modified.
        for field_name, field_val in serializer.validated_data.items():
            # Note that in case field_name is a foreign key, there are two
            # cases:
            #   1. brand
            #   2. brand_id
            # If the field_name is brand then field_val is usually a brand
            # object. If the field name is brand_id, then field val is UUID.
            field = self.get_model_field(field_name)
            if not field:
                continue
            # For foreign keys, user must have 3-way permissions. See
            # .check_3way_permissions().
            if isinstance(field, ForeignKey):
                field_name = field.name  # this removes "_id"
                if isinstance(field_val, DCFModel):
                    field_val_pk = field_val.pk
                else:
                    field_val_pk = field_val
                new_related_obj: QuerySet = QuerySet(model=field.related_model).filter(
                    pk=field_val_pk
                )
                if not new_related_obj.exists():
                    raise e.NotFound(f"Related object {field_val_pk} does not exist.")
                self.check_3way_permissions(
                    self.user_object,
                    self.model_object,
                    field_name,
                    new_related_obj,
                    "w",
                )
            elif not p.has_perms_shortcut(
                self.user_object, self.model_object, "w", field_name
            ):
                raise APIPermissionDenied(self.model_object, "w", field=field_name)
        # when permited
        serializer.save()

        if has_read_permissions:
            p.add_perms_shortcut(self.user_object, instance, "r")
        if p.has_perms_shortcut(self.user_object, instance, "r"):
            return Response(
                self.get_serializer(instance=instance).data,
                status=200,
            )
        else:
            raise UpdatedHiddenObject()
Exemple #8
0
class ResultsListView(ListView):
    template_name = 'library/results_list.html'
    qs = QuerySet()

    def get_queryset(self):
        return self.qs

    def get(self, request, *args, **kwargs):
        query = request.GET.get("q")
        if query:
            self.qs = ProductFamily.objects.filter(
                productmodel__model_number__icontains=query).distinct()
            if not self.qs:
                self.qs = ProductModel.objects.filter(
                    family_id__family_name__icontains=query)
        else:
            self.qs = {}
        return super().get(request, *args, **kwargs)

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super().get_context_data(**kwargs)
        context['search_results'] = self.qs
        context['user'] = Profile.objects.filter(
            user=self.request.user).first()
        return context
Exemple #9
0
class TestCommandMethods(TestCase):
    @patch(
        'jarbas.chamber_of_deputies.management.commands.receipts.Command.update'
    )
    @patch(
        'jarbas.chamber_of_deputies.management.commands.receipts.Command.bulk_update'
    )
    @patch(
        'jarbas.chamber_of_deputies.management.commands.receipts.Command.print_count'
    )
    def test_fetch(self, print_count, bulk_update, update):
        command = Command()
        command.count = 0
        command.queryset = (1, 2, 3)
        command.queue = []
        command.fetch()
        print_count.assert_has_calls((call(), call(), call()))
        update.assert_has_calls(call(i) for i in range(1, 4))
        self.assertEqual(3, command.count)
        bulk_update.assert_called_once_with()

    @patch.object(QuerySet, '__getitem__')
    @patch.object(QuerySet, 'filter', return_value=QuerySet())
    def test_get_queryset(self, filter_, getitem):
        command = Command()
        command.batch = 42
        command.get_queryset()
        filter_.assert_called_once_with(receipt_fetched=False)
        getitem.assert_called_once_with(slice(None, 42))

    def test_update(self):
        reimbursement = Mock()
        command = Command()
        command.queue = []
        command.update(reimbursement)
        reimbursement.get_receipt_url.assert_called_once_with(bulk=True)
        self.assertEqual(1, len(command.queue))

    def test_update_with_error(self):
        reimbursement = Mock()
        reimbursement.get_receipt_url.side_effect = ConnectionError()
        command = Command()
        command.queue = []
        command.update(reimbursement)
        reimbursement.get_receipt_url.assert_called_once_with(bulk=True)
        self.assertEqual(0, len(command.queue))

    @patch(
        'jarbas.chamber_of_deputies.management.commands.receipts.bulk_update')
    @patch(
        'jarbas.chamber_of_deputies.management.commands.receipts.Command.print_saving'
    )
    def test_bulk_update(self, print_saving, bulk_update):
        command = Command()
        command.queue = [1, 2, 3]
        command.bulk_update()
        fields = ['receipt_url', 'receipt_fetched']
        bulk_update.assert_called_once_with([1, 2, 3], update_fields=fields)
        self.assertEqual([], command.queue)
        print_saving.assert_called_once_with()
Exemple #10
0
def album_detail(request):
    """显示专辑中的歌曲信息"""
    albumId = request.GET.get('albumId')
    leixin = "专辑"
    lists = QuerySet()
    name = ""
    if albumId is None:
        lists = SongItem.objects.get_queryset().order_by('id')
    else:
        lists = SongItem.objects.filter(albumid=albumId)
        print(lists)
    if lists:
        t = get_template("albumDetail.html")
        paginator = Paginator(lists, 10)
        page = request.GET.get('page', 1)
        # 把当前的页码数转换成整数类型
        currentPage = int(page)
        it = range(1, 10)
        try:
            lists = paginator.page(page)  # 获取当前页码的记录
        except PageNotAnInteger:
            lists = paginator.page(1)  # 如果用户输入的页码不是整数时,显示第1页的内容
        except EmptyPage:
            # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容
            lists = paginator.page(paginator.num_pages)
        html = t.render(locals())
        return HttpResponse(html)
    else:
        t = get_template("spider.html")
        id = albumId
        name = AlbumItem.objects.get(albumid=albumId).albumname
        kind = "专辑"
        kindId = 1
        html = t.render(locals())
        return HttpResponse(html)
Exemple #11
0
class ProductTypeListView(FormMixin, ListView):
    model = ProductType
    context_object_name = 'types'
    form_class = MainSearch
    qs = QuerySet()

    def get(self, request, *args, **kwargs):
        if request.GET:
            view = ResolutionsResultsView.as_view()
            return view(request, *args, **kwargs)
        # query = request.GET.get("q")
        # if query:
        #     self.qs = ProductFamily.objects.filter(productmodel__model_number__icontains=query).distinct()
        #     if not self.qs:
        #         self.qs = ProductModel.objects.filter(family_id__family_name__icontains=query)
        # else:
        #     self.qs = {}
        return super().get(request, *args, **kwargs)

    def get_context_data(self, *, object_list=None, **kwargs):
        context = super().get_context_data(**kwargs)
        context['search_results'] = self.qs
        context['model_count'] = ProductModel.objects.all().count()
        context['user_count'] = User.objects.all().count()
        return context
Exemple #12
0
class DashboardStatisticView(BasicInfoViewSet):
    """仪表板统计数据接口"""
    queryset = QuerySet()
    serializer_class = DoNothingSerializer
    permission_name = permissions.PER_DASHBOARD
    http_method_names = ('get', )

    def get(self, request, *args, **kwargs):
        """获取资源数据

        Args:
            request(Request): http request
            *args(list): 可变参数
            **kwargs(dict): 可变关键字参数

        Returns:
            response(Response): 响应数据
        """
        articles = models.Article.objects.all()
        data = {
            "article_count": articles.count(),
            "unpublish_count": articles.filter(is_publish=False).count(),
            "tags_count": models.ArticleTag.objects.count(),
            "comment_count": adapt_get_comment_count(),
            "access_count": models.AccessRecord.objects.count(),
            "flink_apply": models.FriendlyLink.objects.filter(enable=False).count(),
            "fans_count": models.SubscribeRecord.objects.all().count()
        }
        return self.set_response(result='Success', data=[data, ])
    def get_most_sold_products(self):
        products = QuerySet(Product)

        for subcategory in self.subcategories.all():
            products = (products | subcategory.get_most_sold_products())

        return products.order_by('-sold')[:5]
Exemple #14
0
class IndexShowCardInfoView(BasicInfoViewSet):
    """个人名片数据接口"""
    queryset = QuerySet()
    serializer_class = DoNothingSerializer
    permission_name = permissions.PER_SHOW_CARD
    authentication_enable = False
    http_method_names = ('get', )

    def get(self, request, *args, **kwargs):
        """获取资源数据

        Args:
            request(Request): http request
            *args(list): 可变参数
            **kwargs(dict): 可变关键字参数

        Returns:
            response(Response): 响应数据
        """
        data = {
            "article_count": Article.objects.filter(is_publish=True).count(),
            "fans_count": SubscribeRecord.objects.count(),
            "classify_count": ArticleClassify.objects.count(),
            "comment_count": adapt_get_comment_count(),
            "access_count": AccessRecord.objects.count(),
        }
        return self.set_response(result='Success', data=[
            data,
        ])
Exemple #15
0
    def get_searched_queryset(self, qs):
        """ CUSTOM """

        model = self.model
        term = self.GET[
            "filter[value]"]  # ho cambiato da "term" a "filter[value]"
        try:
            term = model.autocomplete_term_adjust(term)
        except AttributeError:
            pass

        try:
            search_fields = model.autocomplete_search_fields()
        except AttributeError:
            try:
                search_fields = AUTOCOMPLETE_SEARCH_FIELDS[
                    model._meta.app_label][model._meta.module_name]
            except KeyError:
                search_fields = ()

        if search_fields:
            for word in term.split():
                search = [
                    models.Q(**{smart_text(item): smart_text(word)})
                    for item in search_fields
                ]
                search_qs = QuerySet(model)
                search_qs.query.select_related = qs.query.select_related
                search_qs = search_qs.filter(reduce(operator.or_, search))
                qs &= search_qs
        else:
            qs = model.objects.none()
        return qs
Exemple #16
0
class KeywordsAPIView(ListAPIView):
    """
    This endpoint returns suggestions about what a user may be typing.
    Call this endpoint when a user is typing a search and display the results (for instance below the search bar).

    This endpoint only completes queries that are at least 4 characters.
    """

    serializer_class = KeywordsRequestSerializer
    permission_classes = (AllowAny, )
    schema = SearchSchema()
    queryset = QuerySet()
    pagination_class = None
    filter_backends = []

    def get(self, request, *args, **kwargs):
        # validate request parameters
        serializer = KeywordsRequestSerializer(data=request.GET)
        serializer.is_valid(raise_exception=True)
        data = serializer.validated_data

        client = SearchApiClient()

        res = client.autocomplete(**data)
        return Response(res)
Exemple #17
0
class DashboardArticleChart(BasicInfoViewSet):
    """仪表板文章发表数据柱状图接口"""
    queryset = QuerySet()
    serializer_class = DoNothingSerializer
    permission_name = permissions.PER_DASHBOARD
    http_method_names = ('get',)

    def get(self, request, *args, **kwargs):
        """获取资源数据

        Args:
            request(Request): http request
            *args(list): 可变参数
            **kwargs(dict): 可变关键字参数

        Returns:
            response(Response): 响应数据
        """
        data = list()
        now = datetime.datetime.now()
        flag = 31
        while flag != 0:
            data.insert(0, {
                "date": now.strftime("%m-%d"),
                "count": models.Article.objects.filter(
                    ctime__year=now.year, ctime__month=now.month, ctime__day=now.day
                ).count()
            })
            now -= datetime.timedelta(days=1)
            flag -= 1
        return self.set_response(result='Success', data=data)
Exemple #18
0
def getInbox(request, id_receiver):
    if request.method == 'GET':
        query = Message.objects.all().query
        query.group_by = ['id_sender']
        queryset = QuerySet(query=query, model=Message).filter(
            id_receiver=id_receiver).order_by('date_time')
        serializer = MessageSerializer(queryset, many=True)
        return Response(serializer.data)
Exemple #19
0
 def get_context_data(self, **kwargs):
     context = super().get_context_data(**kwargs)
     functions = self.get_functions()
     context['form'].fields['function'] = ModelChoiceField(QuerySet())
     context['form'].fields['function'].label = 'Обработчик'
     context['form'].fields['function'].widget = Select(attrs={'class': 'form-control border'})
     context['form'].fields['function'].choices = [[cls_name, cls_obj.label] for cls_name, cls_obj in functions]
     return context
Exemple #20
0
    def people(self, request: request.Request, *args: Any,
               **kwargs: Any) -> Response:
        team = request.user.team_set.get()
        filter = Filter(request=request)

        def _calculate_people(events: QuerySet):
            shown_as = request.GET.get('shown_as')
            if shown_as is not None and shown_as == 'Stickiness':
                stickiness_days = int(request.GET['stickiness_days'])
                events = events\
                    .values('person_id')\
                    .annotate(day_count=Count(functions.TruncDay('timestamp'), distinct=True))\
                    .filter(day_count=stickiness_days)
            else:
                events = events.values('person_id').distinct()

            if request.GET.get(
                    'breakdown_type'
            ) == 'cohort' and request.GET.get('breakdown_value') != 'all':
                events = events.filter(
                    Exists(
                        CohortPeople.objects.filter(
                            cohort_id=int(request.GET['breakdown_value']),
                            person_id=OuterRef('person_id')).only('id')))

            people = Person.objects\
                .filter(team=team, id__in=[p['person_id'] for p in events[0:100]])

            people = people.prefetch_related(
                Prefetch('persondistinctid_set', to_attr='distinct_ids_cache'))

            return self._serialize_people(people=people, request=request)

        filtered_events: QuerySet = QuerySet()
        if request.GET.get('session'):
            filtered_events = Event.objects.filter(team=team).filter(
                self._filter_events(filter)).add_person_id(team.pk)
        else:
            entity = Entity({
                'id': request.GET['entityId'],
                'type': request.GET['type']
            })
            if entity.type == TREND_FILTER_TYPE_EVENTS:
                filtered_events =  self._process_entity_for_events(entity, team=team, order_by=None)\
                    .filter(self._filter_events(filter, entity))
            elif entity.type == TREND_FILTER_TYPE_ACTIONS:
                actions = super().get_queryset()
                actions = actions.filter(deleted=False)
                try:
                    action = actions.get(pk=entity.id)
                except Action.DoesNotExist:
                    return Response([])
                filtered_events = self._process_entity_for_events(
                    entity, team=team,
                    order_by=None).filter(self._filter_events(filter, entity))

        people = _calculate_people(events=filtered_events)
        return Response([people])
Exemple #21
0
class DashboardProcessData(BasicInfoViewSet):
    """仪表板事件进度统计接口"""
    queryset = QuerySet()
    serializer_class = DoNothingSerializer
    permission_name = permissions.PER_DASHBOARD
    http_method_names = ('get',)

    @staticmethod
    def _get_article_update_rate(days=30):
        """获取文章的更新频率

        Args:
            days(int): 统计周期,默认为最近30天

        Returns:
            rate(float): 更新频率
        """
        now = datetime.datetime.now()
        start = now - datetime.timedelta(days=days)
        date_range = (
            f'{start.strftime("%F")} 00:00:00',
            f'{now.strftime("%F")} 23:59:59'
        )
        obj = models.Article.objects.filter(ctime__range=date_range)
        update_date = [qs.strftime("%F") for qs in obj.values_list('ctime', flat=True)]
        update_date = list(set(update_date))
        return round(len(update_date)*100 / days, 2)

    @staticmethod
    def _get_incomplete_task_rate():
        """获取未完成任务占比

        Returns:
            rate(float): 未完成任务占比
        """
        total = models.ProjectPlanTask.objects.count()
        incomplete = models.ProjectPlanTask.objects.filter(status=TASK_STATUS_PLAN).count()
        if total == 0:  # 如果没有计划任务,则未完成任务占比为0
            return 0
        return round(incomplete*100/total, 2)

    def get(self, request, *args, **kwargs):
        """获取资源数据

        Args:
            request(Request): http request
            *args(list): 可变参数
            **kwargs(dict): 可变关键字参数

        Returns:
            response(Response): 响应数据
        """
        data = list()
        data.append({
            "article_update_rate": self._get_article_update_rate(),
            "task_incomplete_rate": self._get_incomplete_task_rate(),
        })
        return self.set_response(result='Success', data=data)
Exemple #22
0
def notes(user: User, trash: bool = False) -> QuerySet:
    """
    Returns all note belonging to the argument user if they are authenticated, otherwise it returns an empty QuerySet.
    """
    if user.is_authenticated:
        return Note.objects.filter(notebook__owner=user,
                                   trash=trash).order_by('id')
    else:
        return QuerySet()
    def _build_exhibition(self, exhibition_id):
        home_exhibition = QuerySet(home_models.Exhibition)\
            .filter(page_ptr_id=exhibition_id, live=True).first()

        home_rooms = QuerySet(home_models.Room).filter(
            exhibition_page=exhibition_id
        )

        rooms = self._build_rooms(home_rooms)

        exhibition = Exhibition(
            home_exhibition.page_title,
            home_exhibition.strapline,
            home_exhibition.flyer_image_id,
            rooms
        )

        return exhibition
Exemple #24
0
def notebooks(user: User) -> QuerySet:
    """
    Returns all notebooks belonging to the argument user if they are authenticated, otherwise it returns an empty
    QuerySet.
    """
    if user.is_authenticated:
        return Notebook.objects.filter(owner=user).order_by('id')
    else:
        return QuerySet()
Exemple #25
0
def process_entity_for_events(entity: Entity, team_id: int, order_by="-id") -> QuerySet:
    if entity.type == TREND_FILTER_TYPE_ACTIONS:
        events = Event.objects.filter(action__pk=entity.id).add_person_id(team_id)
        if order_by:
            events = events.order_by(order_by)
        return events
    elif entity.type == TREND_FILTER_TYPE_EVENTS:
        return Event.objects.filter_by_event_with_people(event=entity.id, team_id=team_id, order_by=order_by)
    return QuerySet()
Exemple #26
0
def viewDemo(request):
    form = BookModleForm()
    if request.method == "POST":
        form = BookModleForm(request.POST)
        if form.is_valid():
            book_obj = Book.objects.create(**form.cleaned_data)
            book_obj = QuerySet(book_obj)
            print("is right=", serializers.serialize('json', book_obj))
            return JsonResponse(serializers.serialize('json', book_obj))
    return render(request, 'viewDemo.html', locals())
Exemple #27
0
 def addProperty(self, property, group):
     hasCategory = group.Properties.filter(
         Category=property.Category).exists()
     group.Properties.append(property)
     group.save()
     if not hasCategory:
         functions = self._createGroupDeviceFunctions(QuerySet(property))
         group.Device.Functions += functions
         group.Device.save()  # TODO: use __groupDeviceService here
     return group
Exemple #28
0
    def getLastCompetitions(length=6):
        result_query = QuerySet(Competition)
        for region in Competition.REGIONS:
            result_query = result_query | Competition.objects\
                                            .filter(is_creating_finished=True)\
                                            .filter(started_at__gt=django.utils.timezone.now()) \
                                            .filter(region=region[0]) \
                                            .order_by('-started_at') \
                                            .all()[:length]

        return result_query.order_by('-started_at')
Exemple #29
0
def vendor_customer_order(request):
    vender_id_id = request.session['vendor_id']
    v_id = request.session['vendor_id']
    res = CartItemModel.objects.filter(status='Order',
                                       food__food_type__vender_id=v_id)
    q = CartItemModel.objects.filter(status='Order',
                                     food__food_type__vender_id=v_id).query
    q.group_by = ['customer_id']
    res = QuerySet(query=q, model=CartItemModel)
    print(res)
    return render(request, 'vendor/customer_order.html', {"data": res})
    def _build_walls(self, home_room):
        home_walls = QuerySet(home_models.Wall).filter(room_page=home_room.id)
        walls = []
        for home_wall in home_walls:

            images = self._build_images(home_wall)
            media = self._build_media(home_wall)

            wall = Wall(media, images)
            walls.append(wall)

        return walls