示例#1
0
文件: serializers.py 项目: zbidi/kpi
 def get_assets(self, obj):
     paginator = LimitOffsetPagination()
     paginator.default_limit = 10
     page = paginator.paginate_queryset(
         queryset=obj.assets.all(),
         request=self.context.get('request', None)
     )
     serializer = AssetUrlListSerializer(
         page, many=True, read_only=True, context=self.context)
     return OrderedDict([
         ('count', paginator.count),
         ('next', paginator.get_next_link()),
         ('previous', paginator.get_previous_link()),
         ('results', serializer.data)
     ])
示例#2
0
文件: serializers.py 项目: zbidi/kpi
 def get_children(self, obj):
     paginator = LimitOffsetPagination()
     paginator.default_limit = 10
     queryset = CollectionChildrenQuerySet(obj).select_related(
         'owner', 'parent'
     ).prefetch_related(
         'permissions',
         'permissions__permission',
         'permissions__user',
         'permissions__content_object',
     ).all()
     page = paginator.paginate_queryset(
         queryset=queryset,
         request=self.context.get('request', None)
     )
     serializer = CollectionChildrenSerializer(
         page, read_only=True, many=True, context=self.context)
     return OrderedDict([
         ('count', paginator.count),
         ('next', paginator.get_next_link()),
         ('previous', paginator.get_previous_link()),
         ('results', serializer.data)
     ])
示例#3
0
def ahj_list(request):
    """
    Public API endpoint for AHJ Search. See the API documentation for more information.
    """
    # increment user's # of api calls
    if (request.user.is_authenticated):
        update_user_api_call_num(request.user)

    # Process sent Location object
    str_location = None
    try:
        ob_location = request.data.get('Location', None)
        if ob_location is not None:
            str_location = get_str_location(ob_location)
    except (TypeError, KeyError, ValueError) as e:
        return Response(str(e), status=status.HTTP_400_BAD_REQUEST)

    # Process sent Address object if no location provided
    try:
        if ob_location is None:
            ob_address = request.data.get('Address', None)
            if ob_address is not None:
                str_address = get_str_address(ob_address)
                json_location = get_location_gecode_address_str(str_address)
                str_location = get_str_location(location=json_location)
    except TypeError:
        return Response('Invalid Address, all values must be strings',
                        status=status.HTTP_400_BAD_REQUEST)
    ahjs = filter_ahjs(
        AHJName=get_ob_value_primitive(request.data,
                                       'AHJName',
                                       throw_exception=False),
        AHJID=get_ob_value_primitive(request.data,
                                     'AHJID',
                                     throw_exception=False),
        AHJCode=get_ob_value_primitive(request.data,
                                       'AHJCode',
                                       throw_exception=False),
        AHJLevelCode=get_ob_value_primitive(request.data,
                                            'AHJLevelCode',
                                            throw_exception=False),
        BuildingCode=get_ob_value_primitive(request.data,
                                            'BuildingCodes',
                                            throw_exception=False,
                                            exception_return_value=[]),
        ElectricCode=get_ob_value_primitive(request.data,
                                            'ElectricCodes',
                                            throw_exception=False,
                                            exception_return_value=[]),
        FireCode=get_ob_value_primitive(request.data,
                                        'FireCodes',
                                        throw_exception=False,
                                        exception_return_value=[]),
        ResidentialCode=get_ob_value_primitive(request.data,
                                               'ResidentialCodes',
                                               throw_exception=False,
                                               exception_return_value=[]),
        WindCode=get_ob_value_primitive(request.data,
                                        'WindCodes',
                                        throw_exception=False,
                                        exception_return_value=[]),
        StateProvince=get_ob_value_primitive(request.data,
                                             'StateProvince',
                                             throw_exception=False),
        location=str_location)

    serializer = AHJSerializer
    paginator = LimitOffsetPagination()
    context = get_public_api_serializer_context()
    page = paginator.paginate_queryset(ahjs, request)

    if str_location is not None:
        page = order_ahj_list_AHJLevelCode_PolygonLandArea(page)
    payload = serializer(page, many=True, context=context).data

    # Mimics implementation of LimitOffsetPagination.get_paginated_response(data)
    return Response(
        OrderedDict([
            ('count', paginator.count),
            ('next', paginator.get_next_link()),
            ('previous', paginator.get_previous_link()),
            ('AuthorityHavingJurisdictions', payload
             )  # Match Array name of AuthorityHavingJurisdiction
        ]))
    def post(self, request, *args, **kwargs):
        user = self.request.user
        profile = user.userAssociated.all().first()

        search_field = request.data.get('searchString')

        if user.status == 'Activated' or user.status == 'Deactivated':
            matched_sender = list(
                FriendRequest.objects.filter(request_status='accepted').filter(
                    sender=profile).filter(
                        Q(receiver__full_name__icontains=search_field)
                        | Q(receiver__user__username__icontains=search_field)))

            matched_receiver = list(
                FriendRequest.objects.filter(request_status='accepted').filter(
                    receiver=profile).filter(
                        Q(sender__full_name__icontains=search_field)
                        | Q(sender__user__username__icontains=search_field)))

            friends_list = []
            friends_list.extend(matched_receiver)
            friends_list.extend(matched_sender)

            if friends_list:
                try:
                    paginator = LimitOffsetPagination()
                    paginated_list = paginator.paginate_queryset(
                        friends_list, request)
                    data = FriendModelSerializer(paginated_list,
                                                 context={
                                                     'request': request
                                                 },
                                                 many=True).data

                    response = {
                        'message': 'success',
                        'links': {
                            'next': paginator.get_next_link(),
                            'previous': paginator.get_previous_link()
                        },
                        'count': paginator.count,
                        'body': data,
                        'status': HTTP_200_OK
                    }
                    return Response(response, status=HTTP_200_OK)
                except:
                    data = FriendModelSerializer(friends_list,
                                                 context={
                                                     'request': request
                                                 },
                                                 many=True).data
                    response = {
                        'message': 'success',
                        'body': data,
                        'status': HTTP_200_OK
                    }
                    return Response(response, status=HTTP_200_OK)

            response = {
                'message': 'Success',
                'error': 'No Users Found',
                'status': HTTP_200_OK
            }
            return Response(response, status=HTTP_200_OK)

        response = {
            'message': 'failed',
            'error': 'You are blocked from searching anything',
            'status': HTTP_400_BAD_REQUEST
        }
        return Response(response, status=HTTP_400_BAD_REQUEST)
    def get(self, request, *args, **kwargs):

        user = self.request.user
        profile = user.userAssociated.all().first()

        getfriends_id = "GetFriendList_{}".format(user.id)
        if cache.get(getfriends_id):
            friends_list = cache.get(getfriends_id)
            print("GetFriendlist from Cache")
        else:
            requests_sent_accepted = list(
                FriendRequest.objects.filter(sender=profile).filter(
                    request_status='accepted'))
            requests_received_accepted = list(
                FriendRequest.objects.filter(receiver=profile).filter(
                    request_status='accepted'))

            friends_list = []
            friends_list.extend(requests_sent_accepted)
            friends_list.extend(requests_received_accepted)

            cache.set(getfriends_id, friends_list)
            print("GetFriendlist from DB")

        if friends_list:
            try:
                paginator = LimitOffsetPagination()
                paginated_list = paginator.paginate_queryset(
                    friends_list, request)
                data = FriendModelSerializer(paginated_list,
                                             context={
                                                 'request': request
                                             },
                                             many=True).data

                response = {
                    'message': 'success',
                    'links': {
                        'next': paginator.get_next_link(),
                        'previous': paginator.get_previous_link()
                    },
                    'count': paginator.count,
                    'body': data,
                    'status': HTTP_200_OK
                }
                return Response(response, status=HTTP_200_OK)
            except:
                data = FriendModelSerializer(friends_list,
                                             context={
                                                 'request': request
                                             },
                                             many=True).data

                response = {
                    'message': 'success',
                    'body': data,
                    'status': HTTP_200_OK
                }
                return Response(response, status=HTTP_200_OK)

        response = {
            'message': 'No Friends yet',
            'body': [],
            'status': HTTP_200_OK
        }
        return Response(response, status=HTTP_200_OK)