Ejemplo n.º 1
0
def materialCounterView(request, *args, **kwargs):
    """ View for update and get material view number
    """
    rid = getMaterialRawID(kwargs['mid'], kwargs.get('version', None))
    try:
        counter = MaterialViewCount.objects.get(material=rid)
    except MaterialViewCount.DoesNotExist:
        counter = MaterialViewCount(material_id=rid, count=0)
        counter.save()
    
    data = {}
    if request.method == 'GET':
        pass
    elif request.method == 'PUT':
        try:    
            if not request.DATA:
                incr = 1
            else:
                incr = int(request.DATA.get('increment', 1))
            counter.count += incr 
        except ValueError:
            pass
        counter.last_visit = datetime.utcnow()
        counter.save() 
    elif request.method == 'DELETE':
        counter.count = 0
        counter.save()

    data['view'] = counter.count
    data['last_visit'] = counter.last_visit
    return Response(data)
Ejemplo n.º 2
0
    def list(self, request, *args, **kwargs):
        """ Original list function with caching implemented
        """
        rid = getMaterialRawID(kwargs['mid'], kwargs.get('version', None))
        self.object_list = MaterialComment.objects.filter( material=rid)
        self.object_list = self.object_list.order_by('modified')

        # Default is to allow empty querysets.  This can be altered by setting
        # `.allow_empty = False`, to raise 404 errors on empty querysets.
        allow_empty = self.get_allow_empty()
        if not allow_empty and len(self.object_list) == 0:
            error_args = {'class_name': self.__class__.__name__}
            raise Http404(self.empty_error % error_args)

        # Pagination size is set by the `.paginate_by` attribute,
        # which may be `None` to disable pagination.
        page_size = self.get_paginate_by(self.object_list)
        if page_size:
            packed = self.paginate_queryset(self.object_list, page_size)
            paginator, page, queryset, is_paginated = packed
            serializer = self.get_pagination_serializer(page)
        else:
            serializer = self.get_serializer(self.object_list)
        sr_data = serializer.data
        return Response(sr_data)
Ejemplo n.º 3
0
def materialFavoriteView(request, *args, **kwargs):
    """ View for update and get material view number
    """
    rid = getMaterialRawID(kwargs['mid'], kwargs.get('version', None))
    data = {} 
    if request.method == 'POST':
        pid = request.DATA['person']
        if not MaterialFavorite.objects.filter(material=rid, person=pid).exists():
            fav_obj = MaterialFavorite(material_id=rid, person_id=pid)
            fav_obj.save() 
    elif request.method == 'GET':
        pid = request.GET.get('person', None)
        if pid is not None:
            try:
                count = MaterialFavorite.objects.filter(
                    material=rid, person=pid).exists() and 1 or 0
                data = {'favorite': count}
            except MaterialFavorite.DoesNotExist:
                data = {'favorite': 0}
            return Response(data)
        pass
    elif request.method == 'DELETE':
        pid = request.GET.get('person', None)
        if pid:
            MaterialFavorite.objects.filter(material=rid, person=pid).delete()

    # all cases return final rates
    count = MaterialFavorite.objects.filter(material=rid).count()
    data = {'favorite': count}
    return Response(data)
Ejemplo n.º 4
0
def materialRatesView(request, *args, **kwargs):
    """ View for update and get material view number
    """
    rid = getMaterialRawID(kwargs['mid'], kwargs.get('version', None))
    data = {} 
    if request.method == 'POST':
        pid = request.DATA['person']
        rate = request.DATA['rate'] 
        if not MaterialRating.objects.filter(material=rid, person=pid).exists():
            rate_obj = MaterialRating(material_id=rid, person_id=pid, rate=rate)
            rate_obj.save() 
    elif request.method == 'GET':
        pid = request.GET.get('person', None)
        if pid:
            try:
                s_rate = MaterialRating.objects.get(material=rid, person=pid)
                data = {'rate': s_rate.rate, 'count': 1}
            except MaterialRating.DoesNotExist:
                data = {'rate': None, 'count': 0}
            return Response(data)
    elif request.method == 'DELETE':
        pid = request.GET.get('person', None)
        if pid:
            MaterialRating.objects.filter(material=rid, person=pid).delete()
        else:
            # hey, be careful
            MaterialRating.objects.filter(material=rid).delete()

    # all cases return final rates
    avg_rate, count = getMaterialAvgRate(rid)
    data = {'rate': avg_rate, 'count': count}
    return Response(data)
Ejemplo n.º 5
0
    def create(self, request, *args, **kwargs):
        # change material_id & version to material raw ID
        data = request.DATA.dict()
        rid = getMaterialRawID(kwargs['mid'], kwargs.get('version', None))
        data['material'] = rid

        serializer = self.get_serializer(data=data)
        if serializer.is_valid():
            self.pre_save(serializer.object)
            self.object = serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)