예제 #1
0
class StudentViewSet(viewsets.ModelViewSet):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer
    permission_classes = [permissions.AllowAny]

    @method_decorator(cached_view_as(Student))
    def dispatch(self, *args, **kwargs):
        return super(StudentViewSet, self).dispatch(*args, **kwargs)
예제 #2
0
class DormitoriesViewSet(viewsets.ModelViewSet):
    queryset = Dormitories.objects.all()
    serializer_class = DormitoriesSerializer
    permission_classes = [permissions.DjangoModelPermissions]

    @method_decorator(cached_view_as(Dormitories))
    def dispatch(self, *args, **kwargs):
        return super(DormitoriesViewSet, self).dispatch(*args, **kwargs)
예제 #3
0
class RegionViewSet(viewsets.ReadOnlyModelViewSet):
    """
    API returns the list of the regions
    """
    queryset = Region.objects.all().order_by('name')
    pagination_class = None
    serializer_class = RegionSerializer

    @method_decorator(cached_view_as(Region))
    def dispatch(self, *args, **kwargs):
        return super(RegionViewSet, self).dispatch(*args, **kwargs)
예제 #4
0
    def test_cached_view_as(self):
        get_calls = self._make_func(cached_view_as(Category))

        factory = RequestFactory()
        r1 = factory.get('/hi')
        r2 = factory.get('/hi')
        r2.META['REMOTE_ADDR'] = '10.10.10.10'
        r3 = factory.get('/bye')

        self.assertEqual(get_calls(r1), 1)  # cache
        self.assertEqual(get_calls(r1), 1)  # hit
        self.assertEqual(get_calls(r2), 1)  # hit, since only url is considered
        self.assertEqual(get_calls(r3), 2)  # miss
예제 #5
0
    def test_cached_view_as(self):
        get_calls = self._make_func(cached_view_as(Category))

        factory = RequestFactory()
        r1 = factory.get('/hi')
        r2 = factory.get('/hi')
        r2.META['REMOTE_ADDR'] = '10.10.10.10'
        r3 = factory.get('/bye')

        self.assertEqual(get_calls(r1), 1) # cache
        self.assertEqual(get_calls(r1), 1) # hit
        self.assertEqual(get_calls(r2), 1) # hit, since only url is considered
        self.assertEqual(get_calls(r3), 2) # miss
예제 #6
0
class LocalityViewSet(viewsets.ReadOnlyModelViewSet):
    """
    API returns the list of the localities
    """
    queryset = Locality.objects.all().order_by('name')
    serializer_class = LocalitySerializer
    filter_backends = (DjangoFilterBackend, )
    pagination_class = None
    filter_fields = ('district', )

    @method_decorator(cached_view_as(Locality))
    def dispatch(self, *args, **kwargs):
        return super(LocalityViewSet, self).dispatch(*args, **kwargs)
예제 #7
0
class HospitalShortInfoListAPIView(ListAPIView):
    """
    API create hospital short info
    """
    queryset = Hospital.objects.filter(hidden=False)
    serializer_class = HospitalShortInfoSerializer
    pagination_class = None
    filter_backends = (DjangoFilterBackend, SearchFilter)
    search_fields = ('name', )
    filter_fields = ('search_locality_id', 'search_district_id',
                     'search_region_id')

    @method_decorator(cached_view_as(Hospital))
    def dispatch(self, *args, **kwargs):
        return super(HospitalShortInfoListAPIView,
                     self).dispatch(*args, **kwargs)
예제 #8
0
class AssignmentAPI(viewsets.ModelViewSet):
    queryset = Assignment.objects.all()
    serializer_class = AssignmentSerializer
    permission_classes = [permissions.AllowAny]

    classes = None

    def create(self, request, *args, **kwargs):
        try:
            self.classes = json.loads(request.data.__getitem__("classes_involved"))
            if len(self.classes) < 1:
                raise ValidationError({
                    "classes": [
                        "This field is required."
                    ]
                })
        except Exception:
            raise ValidationError({
                "classes": [
                    "This field is required."
                ]
            })

        return super().create(request, *args, **kwargs)

    def perform_create(self, serializer):
        instance = serializer.save()
        print("classes", self.classes)
        if len(self.classes) > 0:
            for q in self.classes:
                print(q)
                obj = AssignmentClass(class_ns=Classes.objects.get(pk=q),
                                      assignment=Assignment.objects.get(pk=instance.id))
                obj.save()
                print("id", obj.id)

        super().perform_create(serializer)

    @method_decorator(cached_view_as(Assignment.objects.all()))
    def dispatch(self, *args, **kwargs):
        return super(AssignmentAPI, self).dispatch(*args, **kwargs)
예제 #9
0
from cacheops import cached_view_as
from django.conf.urls import url
from rest_framework.urlpatterns import format_suffix_patterns
from articles import views, views_extras
from articles.models import Article, Comment

urlpatterns = [
    url(r'^$', cached_view_as(Article)(views.ArticleList.as_view()), name="article_list"),
    url(r'^(?P<slug>[-_\w]+)/$', cached_view_as(Article)(views.ArticleDetail.as_view()), name="article_detail"),
    url(r'^(?P<article>[0-9]+)/comments/$', cached_view_as(Comment)(views.CommentList.as_view()), name="comment_list"),
    url(r'^vote-article/(?P<pk>[0-9]+)/$', views.VoteArticle.as_view(), name="vote_article"),
    url(r'^vote-comment/(?P<pk>[0-9]+)/$', views.VoteComment.as_view(), name="vote_comment"),
    url(r'^has-perm/write-article/$', views_extras.CanWriteArticle.as_view(), name="can_write_article"),
    url(r'^has-perm/edit-article/(?P<slug>[-_\w]+)/$', views_extras.CanEditDeleteArticle.as_view(), name="can_edit_article"),
]

urlpatterns = format_suffix_patterns(urlpatterns)