1
- from django .shortcuts import render
2
- from django .utils .translation import ugettext_lazy as _
3
- from rest_framework .decorators import api_view
4
- from rest_framework .response import Response
5
1
from rest_framework .generics import (
6
2
ListAPIView , CreateAPIView , RetrieveAPIView , UpdateAPIView , DestroyAPIView )
7
3
from rest_framework .permissions import IsAuthenticated , IsAuthenticatedOrReadOnly , AllowAny
4
+ from rest_framework .response import Response
5
+ from rest_framework .views import APIView
8
6
from .permissions import IsStaffOrModeratorOrEducator , IsOwner , IsStaffOrModerator
9
7
from django .shortcuts import get_object_or_404
10
8
from .models import *
11
9
from .serializers import *
12
10
from django .db import transaction
13
- from django .core .exceptions import PermissionDenied
14
11
from django .contrib .auth .models import AnonymousUser
15
-
12
+ from .utils import generate_pdf , generate_qr_code , download_file
13
+ from django .conf import settings
16
14
17
15
18
16
class ActivityListAPIView (ListAPIView ):
@@ -23,7 +21,7 @@ class ActivityListAPIView(ListAPIView):
23
21
def get_queryset (self ):
24
22
all = Activity .objects .all ()
25
23
return all
26
-
24
+
27
25
28
26
class UserActivitiesAPIView (ListAPIView ):
29
27
"""
@@ -33,7 +31,7 @@ class UserActivitiesAPIView(ListAPIView):
33
31
34
32
serializer_class = ActivitySerializer
35
33
permission_classes = [IsAuthenticated , IsOwner ]
36
-
34
+
37
35
def get_queryset (self ):
38
36
return self .request .user .activities_created .all ()
39
37
@@ -53,7 +51,7 @@ def get_object(self):
53
51
queryset = self .get_queryset ()
54
52
pk = self .kwargs .get ("pk" )
55
53
obj = get_object_or_404 (queryset , pk = pk )
56
-
54
+
57
55
if obj :
58
56
with transaction .atomic ():
59
57
if isinstance (self .request .user , AnonymousUser ):
@@ -65,7 +63,7 @@ def get_object(self):
65
63
obj .views_count += 1
66
64
obj .save ()
67
65
return obj
68
-
66
+
69
67
else :
70
68
raise Exception ()
71
69
@@ -77,7 +75,7 @@ class PublishedActivitiesAPIView(ListAPIView):
77
75
78
76
serializer_class = ActivitySerializer
79
77
permission_classes = [AllowAny ]
80
-
78
+
81
79
def get_queryset (self ):
82
80
limit = self .request .query_params .get ('limit' , 10000 )
83
81
@@ -87,7 +85,7 @@ def get_queryset(self):
87
85
limit = 10
88
86
89
87
return Activity .objects .filter (publish = True )[:limit ]
90
-
88
+
91
89
class UnPublishedActivitiesAPIView (ListAPIView ):
92
90
"""
93
91
Fetch list of unpublished activities by authenticated staff member.
@@ -100,7 +98,7 @@ class UnPublishedActivitiesAPIView(ListAPIView):
100
98
permission_classes = [IsAuthenticated , IsStaffOrModerator ]
101
99
102
100
def get_queryset (self ):
103
- return Activity .objects .filter (publish = False )
101
+ return Activity .objects .filter (publish = False )
104
102
105
103
class ActivityCreateAPIView (CreateAPIView ):
106
104
"""
@@ -150,11 +148,11 @@ class ToggleSaveAPIView(RetrieveAPIView):
150
148
queryset = Activity .objects .all ()
151
149
serializer_class = ActivitySerializer
152
150
permission_classes = [IsAuthenticated ]
153
-
151
+
154
152
def get_object (self ):
155
153
pk = self .kwargs .get ("pk" )
156
154
obj = get_object_or_404 (self .get_queryset (), pk = pk )
157
-
155
+
158
156
if self .request .user in obj .saved_by .all ():
159
157
obj .saved_by .remove (self .request .user )
160
158
obj .save ()
@@ -173,12 +171,59 @@ class togglePublishActivityAPIView(RetrieveAPIView):
173
171
queryset = Activity .objects .all ()
174
172
serializer_class = ActivitySerializer
175
173
permission_classes = [IsAuthenticated , IsStaffOrModerator ]
176
-
174
+
177
175
178
176
def get_object (self ):
179
-
177
+
180
178
pk = self .kwargs .get ("pk" )
181
- obj = get_object_or_404 (self .get_queryset (), pk = pk )
179
+ obj = get_object_or_404 (self .get_queryset (), pk = pk )
182
180
obj .publish = not obj .publish
183
181
obj .save ()
184
182
return obj
183
+
184
+
185
+
186
+ class DownloadActivityPDF (APIView ):
187
+ """
188
+ Download an activities.
189
+ Requires activities id.
190
+ Returns activities file.
191
+ """
192
+ queryset = Activity .objects .all ()
193
+ template_path = 'activities/activity_download.html'
194
+
195
+
196
+ def get_queryset (self ):
197
+ return self .queryset
198
+
199
+ def get_object (self ):
200
+ pk = self .kwargs .get ("pk" )
201
+ obj = get_object_or_404 (self .get_queryset (), pk = pk )
202
+ return obj
203
+
204
+ def get (self , request , * args , ** kwargs ):
205
+ activity = self .get_object ()
206
+ activity_images = ActivityImage .objects .filter (activity = activity )
207
+ activity_steps = ActivityMakingStep .objects .filter (activity = activity )
208
+ if settings .ENVIRONMENT == 'production' :
209
+ qr_code = generate_qr_code (
210
+ link = f"https://zubhub.unstructured.studio/activities/{ activity .id } "
211
+ )
212
+ else :
213
+ qr_code = generate_qr_code (
214
+ link = f"{ settings .DEFAULT_BACKEND_PROTOCOL } //{ settings .DEFAULT_BACKEND_DOMAIN } /activities/{ activity .id } "
215
+ )
216
+ context = {
217
+ 'activity' : activity ,
218
+ 'activity_id' : activity .id ,
219
+ 'activity_images' : activity_images ,
220
+ 'activity_steps' : activity_steps ,
221
+ 'activity_steps_images' : [step .image .all () for step in activity_steps ],
222
+ 'activity_category' : [category .name for category in activity .category .all ()],
223
+ 'creators' : [creator for creator in activity .creators .all ()],
224
+ 'qr_code' : qr_code
225
+ }
226
+ return generate_pdf (
227
+ template_path = self .template_path ,
228
+ context = context
229
+ )
0 commit comments